package com.ck.ips.service.file;

import com.ck.common.model.File;
import com.ck.common.model.OperationResult;
import com.ck.core.exception.ServiceException;
import com.github.pagehelper.Page;
import org.springframework.web.multipart.MultipartFile;

import java.io.IOException;
import java.util.List;

/**
 * @description: 素材文件service接口
 * @author: zhanglei
 * @date: 2019/4/30 10:18
 */
public interface FileService {

    /**
     * 上传图片类型的文件
     * @param files 上传的文件
     * @param cloudFileDir 上传文件夹
     * @param fileName 文件去后缀名称
     * @param extension 文件名后缀
     * @param isCompress 是否需要压缩
     * @return
     */
    File uploadImage(MultipartFile files, String cloudFileDir, String fileName, String extension, boolean isCompress) throws ServiceException, IOException;

    /**
     * 上传视频类型文件
     * @param files 上传的文件
     * @param cloudFileDir 上传的文件夹
     * @param fileName 文件去后缀名称
     * @param extension 文件名后缀
     * @return
     */
    OperationResult<Object> uploadVideo(MultipartFile files, String cloudFileDir, String fileName, String extension) throws ServiceException, IOException;

    /**
     * 保存文件信息至数据库
     * @param loginUserId 登陆用户id
     * @param loginUserType 登陆用户类型
     * @param date 当前时间戳
     * @param groupId 文件分组id
     * @param fileStyle 文件类型
     * @param fileName 文件名称
     * @param extension 文件后缀
     * @param md5 文件MD5
     * @param size  文件大小
     * @param fileUrl 文件地址
     * @param fileImageUrl 文件缩略图地址
     * @param duration 文件时长
     */
    File uploadSure(Long loginUserId,Integer loginUserType,Long date,Long groupId,String fileStyle,String fileName,String extension,String md5,Long size,String fileUrl,String fileImageUrl,Long duration) throws ServiceException, IOException;

    /**
     * 根据条件分页查询文件列表
     * @param fileName 文件名称
     * @param fileType 文件类型
     * @param fileGroupId 文件分组
     * @param pageNum 当前页
     * @param pageSize 每页条数
     * @return
     */
    Page<File> getFileByPage(String fileName,String fileType,Long fileGroupId,Integer pageNum,Integer pageSize);


    /**
     * 根据文件id删除文件
     * @param fileId 文件id
     * @param loginUserId 登陆人id
     */
    OperationResult<Object> deleteFileById(Long fileId, Long loginUserId);

    /**
     * 检测同类型的文件名称是否存在
     * @param fileName 文件名
     * @param fileId 文件id
     * @return
     */
    boolean checkFileNameExist(String fileName,Long fileId);

    /**
     * 修改文件名
     * @param fileName 文件名称
     * @param loginUserId 登陆人id
     * @param fileId 文件id
     */
    OperationResult<Object> updateFileNameById(String fileName, Long loginUserId, Long fileId);

    /**
     * 修改文件分组
     * @param fileIds 文件id
     * @param fileGroupId 文件分组id
     * @param loginUserId 登陆人id
     */
    OperationResult<Object> updateFileGroupById(String fileIds, Long fileGroupId, Long loginUserId);

    /**
     * 通过相似文件名获取文件总数
     * @param fileName    文件名称
     *  @param fileSuffix    文件后缀
     * @return Long
     */
    Long countFileLikeName(String fileSuffix, String fileName) throws ServiceException;

    /**
     * 压缩图片
     * @param file 文件
     * @param fileName 文件名
     * @param oldSufix 后缀
     * @return
     * @throws IOException
     */
    java.io.File compressPicture(java.io.File file, String fileName, String oldSufix) throws IOException;


    /**
     * 批量上传图片
     * @param files
     * @return
     */
    OperationResult batchUploadImage(List<MultipartFile> files) throws IOException, ServiceException;

    OperationResult batchUploadSure(String fileList) throws IOException, ServiceException;
}
